package com.dcrzl.gazgmh.common.service;

import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.dcrzl.gazgmh.common.utils.BaseEntity;
import com.dcrzl.gazgmh.common.utils.PageInfo;
import com.dcrzl.gazgmh.common.utils.Result;

import java.io.Serializable;
import java.util.Collection;
import java.util.List;

public interface BaseService<T extends BaseEntity>  {
    /**
     * <p>
     * 插入一条记录（选择字段，策略插入）
     * </p>
     *
     * @param entity 实体对象
     */
    Result<Integer> insert(T entity);

    /**
     * <p>
     * 插入（批量），该方法不支持 Oracle、SQL Server
     * </p>
     *
     * @param entityList 实体对象集合
     */
    Result<Integer> insertBatch(Collection<T> entityList);


    /**
     * <p>
     * 根据 ID 选择修改
     * </p>
     *
     * @param entity 实体对象
     */
    Result<Integer> updateById(T entity);

    /**
     * <p>
     * 根据 whereEntity 条件，更新记录
     * </p>
     *
     * @param entity        实体对象
     */
    Result<Integer> update(T entity,Wrapper<T> wrapper);


    /**
     * <p>
     * 根据 ID 查询
     * </p>
     *
     * @param id 主键ID
     */
    Result<T> selectById(Serializable id);

    /**
     * 查询信息
     * @param wrapper
     *
     */
    Result<T> selectOne(Wrapper<T> wrapper);

    /**
     * 查询列表
     * @param wrapper
     *
     */
    Result<List<T>> selectList(Wrapper<T> wrapper);

    /**
     * 查询分页列表
     * @param
     * @return
     */
    PageInfo<T> selectPage(BaseEntity entity, Wrapper<T> wrapper);

    /**
     *
     * @param list
     * @return
     */
    Result<List<T>> selectBatchIds(Collection<Serializable> list);

    /**
     * <p>
     * 根据 ID 删除
     * </p>
     *
     * @param id 主键ID
     */
    Result<Integer> deleteById(Serializable id);

    /**
     * <p>
     * 根据 ID 删除
     * </p>
     *
     * @param id 主键ID
     */
    Result<Integer> removeById(Serializable id);

    /**
     * <p>
     * 删除（根据ID 批量删除）
     * </p>
     *
     * @param idList 主键ID列表
     */
    Result<Integer> deleteBatchIds(Collection<? extends Serializable> idList);


}
